package com.bbva.general.generics;

import java.util.HashMap;
import java.util.List;

import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;

import org.richfaces.component.html.HtmlDropDownMenu;
import org.richfaces.component.html.HtmlMenuItem;
import org.richfaces.component.html.HtmlToolBar;

import com.bbva.general.entities.Iconossistemas;
@SuppressWarnings("unchecked")
public class MenuController {

	HtmlToolBar menuBar = new HtmlToolBar();
	private String nodoSeleccionado;
	private HashMap<String, String> constantesM = initConstantes();
	private String accesoUrl;
	private String opcionMenu;
		
	public String getOpcionMenu() {
		return opcionMenu;
	}

	public void setOpcionMenu(String opcionMenu) {
		this.opcionMenu = opcionMenu;
	}

	public String getAccesoUrl() {
		return accesoUrl;
	}

	public void setAccesoUrl(String accesoUrl) {
		this.accesoUrl = accesoUrl;
	}

	public HtmlToolBar getMenuBar() {
						
		try {
			if (menuBar.getChildren().size() ==0) {				
				montarMenu();
			}
			
		} catch (Exception e) {			
			e.printStackTrace();
		}
		return menuBar;
	}
		
	public void setMenuBar(HtmlToolBar menuBar) {
		this.menuBar = menuBar;
	}
	
	@SuppressWarnings("unused")
	public void montarMenu() throws Exception {				
		
		HtmlToolBar menu = new HtmlToolBar();
		ServiceGeneric request = new ServiceGeneric();
		List<Iconossistemas> opcionesSession = (List<Iconossistemas>)request.getSession(true).getAttribute(Constantes.SESSION_OPCIONES);
		
		Application app;
		MethodBinding mb;
		//MethodBinding mbListener;
		
		HtmlDropDownMenu menuDrop = null;
		HtmlMenuItem menuItem = null;
		FacesContext facesContext;
		int i=0;
		if (opcionesSession != null){
			for(Iconossistemas opcion : opcionesSession){
				i++;			
				if (getOpcionMenu()==null){
					menuDrop = new HtmlDropDownMenu();
					menuDrop.setValue(opcion.getMenu());
					
					menuItem = new HtmlMenuItem();
					menuItem.setValue(opcion.getNombre());
									
					setAccesoUrl(opcion.getPagina());
					
					facesContext = FacesContext.getCurrentInstance();
					mb = facesContext.getApplication().createMethodBinding(opcion.getPagina(), null);
					//mbListener = facesContext.getApplication().createMethodBinding(opcion.getDescripcion(), new Class[] {ActionEvent.class});
					
					menuItem.setAction(mb);
					//menuItem.setActionListener(mbListener);
					
					menuDrop.getChildren().add(menuItem);
					menuBar.getChildren().add(menuDrop);
					mb=null;
					
				}else if (opcion.getMenu().equals(getOpcionMenu())){
					menuItem = new HtmlMenuItem();
					menuItem.setValue(opcion.getNombre());
					
					setAccesoUrl(opcion.getPagina());	
					
					facesContext = FacesContext.getCurrentInstance();
					mb = facesContext.getApplication().createMethodBinding(opcion.getPagina(), null);
					//mbListener = facesContext.getApplication().createMethodBinding(opcion.getDescripcion(), new Class[] {ActionEvent.class});
					
					menuItem.setAction(mb);
					//menuItem.setActionListener(mbListener);
					
					menuDrop.getChildren().add(menuItem);
					menuBar.getChildren().add(menuDrop);
					mb=null;
					
				}else{
					menuDrop = new HtmlDropDownMenu();
					menuDrop.setValue(opcion.getMenu());
					
					menuItem = new HtmlMenuItem();
					menuItem.setValue(opcion.getNombre());
					
					setAccesoUrl(opcion.getPagina());
					
					facesContext = FacesContext.getCurrentInstance();
					mb = facesContext.getApplication().createMethodBinding(opcion.getPagina(), null);
					//mbListener = facesContext.getApplication().createMethodBinding(opcion.getDescripcion(), new Class[] {ActionEvent.class});
					
					menuItem.setAction(mb);
					//menuItem.setActionListener(mbListener);
					
					menuDrop.getChildren().add(menuItem);
					menuBar.getChildren().add(menuDrop);	
					mb=null;
			}
				setOpcionMenu(opcion.getMenu());			
			}	
		}
						
	}
			
	public HashMap<String, String> getConstantesM() {
		return constantesM;
	}

	public void setConstantesM(HashMap<String, String> constantesM) {
		this.constantesM = constantesM;
	}

	public String getNodoSeleccionado() {
		return nodoSeleccionado;
	}

	public void setNodoSeleccionado(String nodoSeleccionado) {
		this.nodoSeleccionado = nodoSeleccionado;
	}

	public String loadPage(){
		ServiceGeneric request = new ServiceGeneric();
		List<Iconossistemas> opcionesSession = (List<Iconossistemas>)request.getSession(true).getAttribute(Constantes.SESSION_OPCIONES);
		String codigo = request.getRequestParameter("id");
		String rule = "seg_sin_acceso";
		//boolean flagEncontrado = false;
		
		for(Iconossistemas opcion : opcionesSession){
			if(opcion.getCodigo()!=null && opcion.getCodigo().equals(codigo)){
				setNodoSeleccionado(opcion.getMenu());
				rule = opcion.getPagina();
			}
		}		
		return rule;
	}
	
	public static HashMap<String, String> initConstantes(){
		HashMap<String, String> constantes = new HashMap<String, String>();
		constantes.put("ID_MENU_MANTENIMIENTO", Constantes.ID_MENU_MANTENIMIENTO);
		constantes.put("ID_MENU_ADMINISTRACION", Constantes.ID_MENU_ADMINISTRACION);		
		constantes.put("ID_MENU_USUARIO", Constantes.ID_MENU_USUARIO);
		constantes.put("ID_MENU_PERFIL", Constantes.ID_MENU_PERFIL);
		constantes.put("ID_MENU_CARGA", Constantes.ID_MENU_CARGA);
		constantes.put("ID_MENU_CONFIGURACION", Constantes.ID_MENU_CONFIGURACION);
		
		constantes.put("ID_MENU_MANT_DATOS_GENERALES", Constantes.ID_MENU_MANT_DATOS_GENERALES.toString());
		
		return constantes;
	}
	
	
}
